package com.haoze.nurse.dao;

import com.haoze.nurse.model.NurseFileDataDetailEntity;
import com.haoze.nurse.vo.NurseFileData;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface NurseFileDataDetailMapper {

    /**
     * 新增详情记录
     *
     * @param nurseFileDataDetailEntity
     * @return
     */
    int insert(NurseFileDataDetailEntity nurseFileDataDetailEntity);

    int insertBatch(List<NurseFileDataDetailEntity> nurseFileDataDetailEntity);

    int updateQuoteFileValue(@Param("fileDataDetailId") String fileDataDetailId,@Param("quoteDateValue") String quoteDateValue);

    /**
     * 查询详情节点
     *
     * @param fileDataId
     * @param parentId
     * @return
     */
    List<NurseFileDataDetailEntity> queryDataDetailList(@Param("fileDataId") String fileDataId,
                                                        @Param("parentId") String parentId);

    /**
     * 获取所有查询详情节点数据
     *
     * @return
     */
    List<NurseFileDataDetailEntity> queryAllDataDetailList(Map<String, Object> map);

    /**
     * 获取所有查询详情节点数据
     *
     * @return
     */
    List<Map<String, Object>> queryAllDataDetailLists(Map<String, Object> map);


    /**
     * 获取打印详情，过滤护理记录单中选择隐藏的部分
     *
     * @param fileDataId
     * @param parentId
     * @return
     */
    @Deprecated
    List<NurseFileDataDetailEntity> queryPrintDataDetailList(@Param("fileDataId") String fileDataId,
                                                             @Param("parentId") String parentId);

    /**
     * 获取所有打印详情节点数据
     *
     * @return
     */
    List<NurseFileDataDetailEntity> queryAllPrintDataDetailList(Map<String, Object> map);

    /**
     * 根据fileDataId真删除原记录
     *
     * @param fileDataId
     * @return
     */
    int deleteDetailRecordByDataId(@Param("fileDataId") String fileDataId);

    /**
     * 查询Apgar评分
     *
     * @param targetVarcode
     * @param fileDataId
     * @return
     */
    String queryApgarAccess(@Param("targetVarcode") String targetVarcode,
                            @Param("fileDataId") String fileDataId);

    /**
     * 根据时间范围获取需要参与统计的记录
     *
     * @param inpatNum
     * @param recordType
     * @param beginTime
     * @param endTime
     * @return
     */
    List<Map<String, String>> queryStatisticsDetailDatas(@Param("inpatNum") String inpatNum,
                                                         @Param("recordType") String recordType,
                                                         @Param("beginTime") Date beginTime,
                                                         @Param("endTime") Date endTime);
    /**
     * 根据时间范围获取需要参与补液的统计的记录
     *
     * @param inpatNum
     * @param recordType
     * @param beginTime
     * @param endTime
     * @return
     */
    List<Map<String, String>> queryStatisticsDetailByDatas(@Param("inpatNum") String inpatNum,
                                                         @Param("recordType") String recordType,
                                                         @Param("beginTime") Date beginTime,
                                                         @Param("endTime") Date endTime);

    /**
     * 记录原记录到临时表并将原记录清除
     *
     * @param fileDataId
     */
    void recordBeforeAndDeleteSource(@Param("fileDataId") String fileDataId);

    /**
     * 比较更新到痕迹表
     *
     * @param fileDataId
     * @param markId
     * @param operationType
     * @param operationId
     */
    void compareAfterUpdate(@Param("fileDataId") String fileDataId,
                            @Param("markId") String markId,
                            @Param("operationType") String operationType,
                            @Param("operationId") String operationId);

    /**
     * 根据fileDataId和VarCode获取一个详情节点（但是不能查询同一个模板有多个相同VAR_CODE的情况）
     *
     * @param fileDataId
     * @param varCode
     * @return
     */
    NurseFileDataDetailEntity queryOneDataDetail(@Param("fileDataId") String fileDataId,
                                                 @Param("varCode") String varCode);

    /**
     * 获取第一次宫缩时间
     *
     * @param inpatNum
     * @return
     */
    String queryFirstContractionTime(@Param("inpatNum") String inpatNum);

    /**
     * 获取宫口开全时间
     *
     * @param inpatNum
     * @return
     */
    String queryOstiumOfUterusOpenTime(@Param("inpatNum") String inpatNum);

    /**
     * 获取破膜时间
     *
     * @param inpatNum
     * @return
     */
    String queryOutMembranaTime(@Param("inpatNum") String inpatNum);

    /**
     * 母婴早接触，早吮吸时间
     *
     * @param inpatNum
     * @return
     */
    String queryEarlyContactTime(@Param("inpatNum") String inpatNum);


    List<String> getNeonatusGender(@Param("fileDataId") String fileDataId);

    /**
     * @param identify        0-单个节点 1-大节点
     * @param fileIndexDataId 病历id
     * @return
     */
    List<Map<String, Object>> getFileIndexDataEntity(@Param("identify") String identify,
                                                     @Param("fileIndexDataId") String fileIndexDataId);

    String getFileIndexDataValue(@Param("fileIndexDataId") String fileIndexDataId);


    int deleteQuoteByPatentId(@Param("parentId") String parentId,@Param("fileDataId") String fileDataId);


    int updateQuoteFile(Map<String, Object> map);

    List<Map<String, String>> queryRemarkQouteList(@Param("inpatNum") String inpatNum,
                                                   @Param("name") String name);

    int updateRemarkDataValue(@Param("inpatNum") String inpatNum,
                              @Param("varCode") String varCode,
                              @Param("beforeName") String beforeName,
                              @Param("afterName") String afterName);

    /**
     * Apgar总分详情
     * @param fileDataId
     * @return
     */
    List<Map<String,String>> queryApgarDetail(@Param("fileDataId") String fileDataId);

    /**
     * Apgar扣分项目详情(2分为满分)
     * @param parentId
     * @return
     */
    List<Map<String,String>> queryApgarScoreDetail(@Param("parentId") String parentId);

    NurseFileDataDetailEntity queryOneDetailData(@Param("inpatNum") String inpatNum,
                                                 @Param("tplDetailId") String tplDetailId);

    int updateDataCodeAndValue(@Param("dataVersion") Integer dataVersion,
                               @Param("dataCode") String dataCode,
                               @Param("dataValue") String dataValue,
                               @Param("fileDataDetailId") String fileDataDetailId);


}
